<?php
/*
 * @Descripttion: 
 * @version: 1.0
 * @Author: Sam
 * date: 2021-12-01 09:56:56
 * @LastEditors: Sam
 * @LastEditTime: 2022-03-07 18:31:50
 */
namespace app\api\controller;
use app\Request;
use think\facade\Env;
use think\facade\Db;

/**
 * NotParse
 */
class Base
{
    protected $uid; // 用户openid
    protected $redis_key; // redis目录

    /**
     * 构造方法
     * Base constructor.
     */
    public function __construct() {
        // 计算项目名称
        $temp = explode("/", str_replace('\\', '/', substr(app()->getRootPath(), 0, strlen(app()->getRootPath()) - 1)));
        $this->redis_key = end($temp);
    }

    /**
     * h5获取用户id
     * @return void
     * @author Sam
     */
    public   function get_h5_user_id(){
        $user = session("{$this->redis_key}_user");
        if(!$user) \json_response(-1,'请重新登录');
        $info = Db::name('user')->where('id',$user['uid'])->count();
        if(!$info) \json_response(-1,'请重新登录');
        return $user['uid'];
    }
    /**
     * 中间件模式获取用户uid
     * @return void
     * @author Sam
     */
    public  static function get_user_id(){
        return Request::uid();
    }

       /**
     * 中间件模式获取用户信息
     * @return void
     * @author Sam
     */
    public static function get_user_info(){
        return Request::user();
    }

           /**
     * 中间件模式获取原始JWT token信息
     * @return void
     * @author Sam
     */
    public static  function get_token_info(){
        return Request::tokenData();
    }

    /**
     * 通过token换取openid和user_id  非中间件模式 重复验证token  返回用户UID
     * @return bool|string
     */
    public static function get_base_user_id() {
        $token = request()->header('token');
        $jwt = \Jwt::getInstance();
        $jwt->setKey(Env::get('TOKEN_KEY')); //设置秘钥 每个项目务必更换
        $jwt->setIss(Env::get('TOKEN_ISS'));  //签发者  可以写项目名或者开发者姓名
        $info= $jwt->verifyToken($token);
        if(!$info) \json_response(-1,'token验证失败，请重新登录');
        $uid = $info['claim']['uid'];
         // 验证uid真实性
         $user_info = db('user')->where('id', $uid)->field('id as user_id, openid')->count();
         if(empty($user_info)) json_response(0, '用户不存在');
         return $uid;
    }

}